package com.yeskery.transfer.core;

import lombok.Getter;

import java.util.concurrent.atomic.AtomicLong;

/**
 * 系统计数器
 * @author shuangjiang.du
 * @date 2018-12-17 11:33
 * @version 1.0
 */
public class Counter {

	/** 原子计数器 */
	private AtomicLong counter;

	/** 时间戳 */
	@Getter
	private long timestamp;

	/**
	 * 创建一个新的系统计数器
	 */
	public Counter() {
		counter = new AtomicLong(0);
		timestamp = System.currentTimeMillis();
	}

	/**
	 * 增加一个计数
	 * @return 增加后的计数
	 */
	public long increment() {
		return counter.incrementAndGet();
	}

	/**
	 * 减少一个计数
	 * @return 减少后的计数
	 */
	public long decrement() {
		return counter.decrementAndGet();
	}

	/**
	 * 获取当前计数器的计数
	 * @return 当前计数器的计数
	 */
	public long get() {
		return counter.get();
	}

	/**
	 * 更新操作时间戳
	 * @return 更新后的时间戳
	 */
	public long update() {
		timestamp = System.currentTimeMillis();
		return timestamp;
	}
}